package br.com.smachado.calcados.ui.fornecedor;

import br.com.smachado.calcados.comuns.AppConstantes;
import br.com.smachado.calcados.entity.Fornecedor;
import br.com.smachado.calcados.service.FornecedorService;
import br.com.smachado.calcados.util.MensagemUtil;
import br.com.smachado.calcados.util.PropertiesUtil;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.table.DefaultTableModel;
import org.apache.commons.lang.StringUtils;

/**
 * Formulário de cadastro de fornecedores
 * @author gu
 */
public class JDialogCadastroFornecedor extends javax.swing.JDialog {
    
    private FornecedorService service;
    private DefaultTableModel tableModelFornecedor; 
    private List<Fornecedor> listaFornecedores;
    private Fornecedor fornecedor;

    /**
     * Creates new form JFrameCadastroFornecedor
     */
    public JDialogCadastroFornecedor(JFrame parent, boolean modal) {
        super(parent, PropertiesUtil.getString("label.titulo.form.cadastro.fornecedor"), true);
        service = new FornecedorService();
        fornecedor = new Fornecedor();
        initComponents();
    }

    public JDialogCadastroFornecedor(JFrame parent, DefaultTableModel tableModelFornecedor, 
            List<Fornecedor> listaFornecedores, Fornecedor fornecedor) {
        super(parent, PropertiesUtil.getString("label.titulo.form.cadastro.fornecedor"), true);
        service = new FornecedorService();
        this.tableModelFornecedor = tableModelFornecedor;
        this.fornecedor = fornecedor;
        this.listaFornecedores = listaFornecedores;
        initComponents();
        this.definirValores(fornecedor);
    }
    
    /**
     * Define os valores dos campos do formulário
     * @param fornecedor 
     */
    private void definirValores(Fornecedor fornecedor) {
        if(fornecedor.getId() != null){
            codigo.setText(String.valueOf(fornecedor.getId()));
        }
        nome.setText(fornecedor.getNome());
        cnpj.setText(fornecedor.getCnpj());
        botaoExcluir.setEnabled(true);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        panelFornecedor = new javax.swing.JPanel();
        labelCodigo = new javax.swing.JLabel();
        labelNome = new javax.swing.JLabel();
        labelCnpj = new javax.swing.JLabel();
        codigo = new javax.swing.JTextField();
        nome = new javax.swing.JTextField();
        cnpj = new javax.swing.JTextField();
        botaoCadastrar = new javax.swing.JButton();
        botaoExcluir = new javax.swing.JButton();
        botaoCancelar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        panelFornecedor.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));

        labelCodigo.setText(PropertiesUtil.getString("label.codigo"));

        labelNome.setForeground(java.awt.Color.red);
        labelNome.setText(PropertiesUtil.getString("label.nome"));

        labelCnpj.setText(PropertiesUtil.getString("label.cnpj"));

        codigo.setEditable(false);

        botaoCadastrar.setText(PropertiesUtil.getString("label.salvar"));
        botaoCadastrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoCadastrarActionPerformed(evt);
            }
        });

        botaoExcluir.setText(PropertiesUtil.getString("label.excluir"));
        botaoExcluir.setEnabled(false);
        botaoExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoExcluirActionPerformed(evt);
            }
        });

        botaoCancelar.setText(PropertiesUtil.getString("label.cancelar"));
        botaoCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoCancelarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout panelFornecedorLayout = new javax.swing.GroupLayout(panelFornecedor);
        panelFornecedor.setLayout(panelFornecedorLayout);
        panelFornecedorLayout.setHorizontalGroup(
            panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelFornecedorLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelFornecedorLayout.createSequentialGroup()
                        .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(panelFornecedorLayout.createSequentialGroup()
                                .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(labelCodigo)
                                    .addComponent(codigo, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGap(0, 0, Short.MAX_VALUE))
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelFornecedorLayout.createSequentialGroup()
                                .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(labelNome)
                                    .addComponent(nome, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(cnpj, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(labelCnpj))))
                        .addContainerGap())
                    .addGroup(panelFornecedorLayout.createSequentialGroup()
                        .addComponent(botaoExcluir, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(botaoCancelar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(botaoCadastrar, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE))))
        );
        panelFornecedorLayout.setVerticalGroup(
            panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelFornecedorLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(labelCodigo)
                .addGap(3, 3, 3)
                .addComponent(codigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(labelNome)
                    .addComponent(labelCnpj))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(nome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cnpj, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 92, Short.MAX_VALUE)
                .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botaoCadastrar)
                    .addComponent(botaoExcluir)
                    .addComponent(botaoCancelar))
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(panelFornecedor, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(panelFornecedor, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Ação do botão Cadastrar
     * @param evt 
     */
    private void botaoCadastrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaoCadastrarActionPerformed
        evt.toString();
        
        try {

            boolean isInclusao = null == fornecedor.getId();

            fornecedor.setCnpj(cnpj.getText());
            fornecedor.setNome(nome.getText());

            if (this.validarCampos(fornecedor)) {
                service.salvar(fornecedor);
                MensagemUtil.exibeMensagemSucesso(this, PropertiesUtil.getString(
                        "msg.registro.gravado.sucesso"));
                
                Object[] linha = new Object[]{
                    fornecedor.getId(),
                    fornecedor.getNome(),
                    fornecedor.getCnpj()
                };

                if (isInclusao) {
                    tableModelFornecedor.addRow(linha);
                    listaFornecedores.add(fornecedor);
                }

                this.dispose();
            }

        } catch (Exception e) {
            MensagemUtil.exibeMensagemErro(this, e.toString());
        }

    }//GEN-LAST:event_botaoCadastrarActionPerformed

    /**
     * Ação do botão Excluir
     * @param evt 
     */
    private void botaoExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaoExcluirActionPerformed
        evt.toString();
        
        try {

            service.excluir(fornecedor);
            MensagemUtil.exibeMensagemSucesso(this, PropertiesUtil.getString(
                    "msg.registro.excluido.sucesso"));
            this.tableModelFornecedor.removeRow(listaFornecedores.indexOf(fornecedor));
            this.dispose();

        } catch (Exception e) {
            MensagemUtil.exibeMensagemErro(this, e.toString());
        }
    }//GEN-LAST:event_botaoExcluirActionPerformed

    /**
     * Ação do botão Cancelar
     * @param evt 
     */
    private void botaoCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaoCancelarActionPerformed
        evt.toString();
        this.dispose();
    }//GEN-LAST:event_botaoCancelarActionPerformed

    /**
     * Validação dos campos do formulário
     * @param fornecedor
     * @return 
     */
    private boolean validarCampos(Fornecedor fornecedor) {
        StringBuilder retorno = new StringBuilder(
                PropertiesUtil.getString("label.campo.obrigatorio"));
        
        boolean validacao = true;
        
        if(StringUtils.isBlank(fornecedor.getNome())){
            retorno.append(labelNome.getText());
            retorno.append(AppConstantes.QUEBRA_LINHA);
            validacao = false;
        }
        
        if(!validacao){
            MensagemUtil.exibeMensagemErro(this, retorno.toString());
            return false;
        }
        
        return true;
    }
    
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botaoCadastrar;
    private javax.swing.JButton botaoCancelar;
    private javax.swing.JButton botaoExcluir;
    private javax.swing.JTextField cnpj;
    private javax.swing.JTextField codigo;
    private javax.swing.JLabel labelCnpj;
    private javax.swing.JLabel labelCodigo;
    private javax.swing.JLabel labelNome;
    private javax.swing.JTextField nome;
    private javax.swing.JPanel panelFornecedor;
    // End of variables declaration//GEN-END:variables
}
